package com.haidechizi.leetcode;

import java.util.ArrayList;
import java.util.List;

/**
 * 给出 n 代表生成括号的对数，请你写出一个函数，使其能够生成所有可能的并且有效的括号组合。
 * <p>
 * 例如，给出 n = 3，生成结果为：
 * <p>
 * [
 * "((()))",
 * "(()())",
 * "(())()",
 * "()(())",
 * "()()()"
 * ]
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/generate-parentheses
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class _22_括号生成 {
    public List<String> generateParenthesis(int n) {
        List<String> result = new ArrayList<>();
        generate("", n, n, result);
        return result;
    }


    public void generate(String item, int left, int right, List<String> result) {
        // 括号构建完成，将最后的字符串添加到result中
        if (left == 0 && right == 0) {
            result.add(item);
            return;
        }
        if (left > 0) {
            generate(item + "(", left - 1, right, result);
        }
        if (right > left) {
            generate(item + ")", left, right - 1, result);
        }
    }

}
